package com.cn.gmall.order.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cn.gmall.model.enums.ProcessStatus;
import com.cn.gmall.model.order.OrderInfo;

import java.util.List;
import java.util.Map;
import java.util.Objects;

public interface OrderService {
    /***
     * * 转化orderInfo为map对象，符合库存系统的json数据结构
     * @param orderInfo
     * @return
     */
    public Map<String, Object> initWareOrder(OrderInfo orderInfo);
    /**
     * 去结算
     * @param userId
     * @return
     */
    Map<String, Object> toTrade(String userId);

    /**
     * 校验流水号
     * @param userId
     * @param tradeNo
     * @return
     */
    boolean checkTradeCode(String userId, String tradeNo);

    /***
     * 校验库存
     * @param skuId
     * @param skuNum
     * @return
     */
    boolean checkStock(Long skuId, Integer skuNum);

    /***
     * 保存订单
     * @param orderInfo
     * @return
     */
    Long submitOrder(OrderInfo orderInfo);

    /**
     * 生成流水号
     * @param userId
     * @return
     */
    String getTradeNo(String userId);

    /**
     * 删除流水号
     * @param userId
     */
    void deleteTradeNo(String userId);

    /***
     * 查看我的订单
     *
     * @param userId
     * @param orderInfoPage
     * @return
     */
    IPage<OrderInfo> findOrdersByUserId(String userId, Page<OrderInfo> orderInfoPage);

    /***
     * 根据id找orderInfo信息
     * @return
     */
    OrderInfo getOrderById(Long orderId);

    /***
     * 取消订单
     * @param orderId
     */
    void execExpiredOrder(Long orderId,String flag);
    /**
     * 根据订单Id 修改订单的状态
     * @param orderId
     * @param processStatus
     */
    void updateOrderStatus(Long orderId, ProcessStatus processStatus);

    /***根据out_trade_no查询订单详情
     *
     * @param out_trade_no
     * @return
     */
    OrderInfo findOrderByOutTradeNo(String out_trade_no);

    /***
     * 扣减库存)
     * @param id
     */
    void sendOrderSatus(Long id);

    /***
     * 拆单
     * @param orderId
     * @param wareSkuMap
     * @return
     */
    List<OrderInfo> orderSplit(String orderId, String wareSkuMap);
}
